An enterprise user of virtualization computer systems, over time, may use a number of heterogeneous cloud infrastructures, including private clouds, public clouds, and hybrid clouds. This may be because of acquisitions, technology refresh, or price reasons. However, each cloud infrastructure comes with its own service capabilities. Managing such multiple heterogeneous cloud infrastructures is difficult, as the service capabilities will widely differ in terms of hardware architectures (compute, storage, network, storage, etc.) and services offered.
As a consequence, in a multi-cloud infrastructure, there is no consistent way for application authors to demand a certain level of performance based on required characteristics, e.g., input/output (IO) latency, input/output operations per second (IOPS), etc., or to ask for the data to be always encrypted. Conventionally, the way to solve such a problem is to design and implement fixed infrastructure resources and capabilities based on each service level offered by the different cloud infrastructures. The management, consumption, and mapping of all the service levels are done manually or using a semi-automated scheme that relies on inventory systems or spreadsheets. While the conventional solution may work for initial placement, making sure the requirements are being met over the lifetime of the application is much more complicated. Moving an application across clouds is possible today but it is something that is performed manually and introduces outages and application service disruption.